﻿using app.Common;
using HLVControl.Grid;
using HLVControl.Grid.Data;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Data.EntityClient;
using System.Data.Objects.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace eService.BLL
{
    //USERPERDETAIL
    public class ExcutePHANQUYEN
    {
        eServiceEntities dbEntities;
        IExecuteData<USERPERDETAIL> Execute;
        IExecuteData<PERMISSON> ExecuteQH;
        public string ErrMsg { get; set; }
        public bool KQ { get; set; }

        public ExcutePHANQUYEN()
        {
            dbEntities = ConnectionProvider.getDbEntities();
            Execute = new ExecuteData<USERPERDETAIL>(dbEntities);
            ExecuteQH = new ExecuteData<PERMISSON>(dbEntities);
        }

        public List<PERMISSON> GetAllQuyenHan()
        {
            List<PERMISSON> list = (List<PERMISSON>)ExecuteQH.GetAll();
            if (list != null && list.Count > 0) KQ = true;
            return list;
        }

        public List<USERPERDETAIL> GetAllBy(string UserName)
        {
            List<USERPERDETAIL> list = (List<USERPERDETAIL>)Execute.GetAll().Where(c=>c.UserName==UserName).ToList();
            if (list != null && list.Count > 0) KQ = true;
            return list;
        }
        public List<USERPERDETAIL> GetAll()
        {
            List<USERPERDETAIL> list = (List<USERPERDETAIL>)Execute.GetAll();
            if (list != null && list.Count > 0) KQ = true;
            return list;
        }
        public USERPERDETAIL GetByID(int ID)
        {
            USERPERDETAIL u = Execute.GetById(ID);
            if (u != null) KQ = true;
            return u;
        }
        public bool Add(USERPERDETAIL Newobj)
        {
            KQ = false;
            if (Newobj != null)
            {
                KQ = Execute.Insert(Newobj);
                if (KQ)
                    ErrMsg = "Thêm thành công!";
                else
                    ErrMsg = "Không thể thêm !";
            }
            else
            {
                ErrMsg = "Vui lòng nhập thông tin đầy đủ!";
            }
            return KQ;
        }
        public bool UpDate(USERPERDETAIL obj)
        {
            KQ = false;
            if (obj != null)
            {
                USERPERDETAIL obj1 = dbEntities.USERPERDETAILs.Find(obj.PerID);
                if (obj1 != null)
                {
                    KQ = Execute.Update(obj, obj1);
                    if (KQ)
                        ErrMsg = "Cập nhật thành công!";
                    else
                        ErrMsg = "Không thể cập nhật!";
                }
            }
            else
            {
                ErrMsg = "Vui lòng chọn thông tin!";
            }
            return KQ;
        }
        public bool Delete(USERPERDETAIL obj)
        {
            KQ = false;
            if (obj != null)
            {
                USERPERDETAIL obj1 = dbEntities.USERPERDETAILs.Find(obj.ID);
                if (obj != null)
                {
                    KQ = Execute.Delete(obj1);
                    if (KQ)
                        ErrMsg = "xoá thành công!";
                    else
                        ErrMsg = "Không thể xoá!";
                }
            }
            else
            {
                ErrMsg = "Vui lòng chọn!";
            }
            return KQ;
        }
        public USERPERDETAIL LoadValues(int Ma,string UserName,int QuyenHan)
        {
            KQ = false;
            USERPERDETAIL obj = new USERPERDETAIL();
            if (UserName != "" && QuyenHan > 0)
            {
                obj.ID = Ma;
                obj.PerID = QuyenHan;
                obj.UserName = UserName;
                KQ = true;
            }
            else
            {
                obj = null;
                ErrMsg = "Vui lòng điền đầy đủ thông tin!";
            }
            return obj;
        }
        public DataTable ToDataTable(List<USERPERDETAIL> list)
        {
            DataTable dtData = Execute.ToDataTable<USERPERDETAIL>(list);
            return dtData;
        }

        public void LoadToListViewQuyenHan(ListView lstQuyen)
        {
            try
            {
                List<PERMISSON> listQH = GetAllQuyenHan();
                lstQuyen.Items.Clear();
                if (listQH.Count == 0) return;
                if (listQH != null)
                {
                    ListViewItem item;
                    ListViewItem.ListViewSubItem subitem;
                    foreach (PERMISSON quyen in listQH)
                    {
                        item = new ListViewItem(quyen.PerID.ToString());
                        item.Checked = false;
                        subitem = new ListViewItem.ListViewSubItem(item, quyen.PerName.ToString());

                        item.SubItems.Add(subitem);
                        lstQuyen.Items.Add(item);
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Lỗi :" + ex.Message, "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        public void LoadQuyenHan(ListView lstQuyen, List<USERPERDETAIL> listQH)
        {
            try
            {
                string ErrMsg = "";
                lstQuyen.Items.Clear();
                LoadToListViewQuyenHan(lstQuyen);
                if (listQH != null && listQH.Count > 0)
                {
                    if (ErrMsg != "")
                    {
                        MessageBox.Show(ErrMsg);
                        return;
                    }
                    foreach (ListViewItem item in lstQuyen.Items)
                    {
                        int MaQuyenHan = Int32.Parse(item.Text);
                        USERPERDETAIL obj1 = listQH.Find(c => c.PerID == MaQuyenHan);
                        if (obj1 != null)
                            item.Checked = true;
                        else
                            item.Checked = false;
                    }
                }
            }
            catch
            {
            }
            lstQuyen.Refresh();
        }
    }
}
